package city.spring.modules.bed.service;

import city.spring.modules.bed.entity.*;
import city.spring.modules.bed.vo.BedInfoVO;
import com.google.common.collect.ListMultimap;

import java.util.List;

/**
 * 公寓管理的Service
 *
 * @author HouKunLin
 * @date 2020/8/6 0006 16:44
 */
public interface BedManagementService {
    String CACHE_NAME = "BedManagement";

    /**
     * 获得老人床位信息
     *
     * @param oldmanId 老人ID
     * @return 床位信息
     * @deprecated 过时的方法，老人与床位关联关系已经改变，该方法无法正确获取到数据
     */
    @Deprecated
    BedInfoVO getOldmanBed(String oldmanId);

    /**
     * 加载所有的楼栋、楼层、房间、床位列表信息
     *
     * @param loadBed 是否加载床位
     * @return 返回统一的一个结构对象
     */
    List<BaseStruct> getAllData(boolean loadBed);

    /**
     * 加载所有的楼栋、楼层、房间、床位列表信息
     *
     * @param loadBed 是否加载床位
     * @return 返回树形结构数据
     */
    ListMultimap<String, BaseStruct> getAllTreeData(boolean loadBed);

    /**
     * 获取床位列表
     *
     * @return 返回一个类似map的对象，其中Key为房间的ID，value为该Key的床位列表
     */
    ListMultimap<String, BedEntity> getBedMultimap();

    /**
     * 获取房间列表
     *
     * @param bedMultimap {@link #getBedMultimap()} 所有房间对应的床位列表信息
     * @return 返回一个类似map的对象，其中Key为楼层的ID，value为该Key的房间列表
     */
    ListMultimap<String, BedRoomEntity> getFloorRoomMultimap(ListMultimap<String, BedEntity> bedMultimap);

    /**
     * 获取楼层列表
     *
     * @param roomMultimap {@link #getFloorRoomMultimap(ListMultimap)} 所有楼层对应的房间列表信息
     * @return 返回一个类似map的对象，其中Key为楼栋的ID，value为该Key的楼层列表
     */
    ListMultimap<String, BedFloorEntity> getFloorMultimap(ListMultimap<String, BedRoomEntity> roomMultimap);

    /**
     * 获取楼栋列表
     *
     * @param floorMultimap {@link #getFloorMultimap(ListMultimap)} 所有楼栋对应的楼层列表信息
     * @return 返回所有楼栋列表
     */
    List<BedBuildingEntity> getBuildingList(ListMultimap<String, BedFloorEntity> floorMultimap);

    /**
     * 获取床位信息
     *
     * @param bedId 床位ID
     * @return 床位信息
     */
    BedInfoVO getBedInfo(String bedId);

    /**
     * 获取床位信息列表
     *
     * @param bedIds 床位ID列表
     * @return 床位信息列表
     */
    List<BedInfoVO> getBedInfoByBedIds(List<String> bedIds);
}
